//package com.xlf.service.judge.strategy.judgeMachine.impl.localJudge;
//
//import cn.hutool.core.io.FileUtil;
//import com.sun.deploy.util.ArrayUtil;
//import com.xlf.common.core.util.CommandUtil;
//import com.xlf.common.core.util.StringUtils;
//import com.xlf.pojo.constant.Constants;
//import com.xlf.service.judge.io.LanguageConfigLoader;
//import com.xlf.service.judge.io.ResourceLoader;
//import com.xlf.service.judge.pojo.CompileResult;
//import com.xlf.service.judge.pojo.LanguageConfig;
//import com.xlf.service.judge.pojo.RunDTO;
//import com.xlf.pojo.dto.RunResult;
//import com.xlf.service.judge.strategy.judgeMachine.AbstractJudgeMachineStrategy;
//import org.apache.commons.lang3.ArrayUtils;
//
//import java.io.File;
//import java.nio.charset.StandardCharsets;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.UUID;
//
///**
// * @Author xlf 2734029211@qq.com
// * @Date 2023/9/20 15:34
// * @Description:
// * @Version 1.0
// */
//@Deprecated
//public class LocalJudgeMachine extends AbstractJudgeMachineStrategy {
//
//
//    //
//    private String baseDir = "D://OJ/";  // 工作目录
//
//
//    private String stdout = "stdout.txt"; //  标准输出
//    private String stderr = "stderr.txt";  // 标准错误
//
//
//    public LocalJudgeMachine(LanguageConfigLoader languageConfigLoader, ResourceLoader resourceLoader) {
//        super(languageConfigLoader, resourceLoader);
//    }
//
//    @Override
//    protected CompileResult compile(LanguageConfig languageConfig, String code) {
//
//        String workDir = baseDir  + UUID.randomUUID() + "/";
//
//        String stderrPath = workDir + stderr;
//        // 准备用来存放临时文件的目录
//        File workFile = new File(workDir);
//        if(!workFile.exists()){
//            workFile.mkdirs();
//        }
//        String srcPath =  workDir + languageConfig.getSrcName();
//        FileUtil.writeBytes(code.getBytes(StandardCharsets.UTF_8),srcPath);
//        CompileResult compileResult = new CompileResult();
//        compileResult.setStatus(Constants.Judge.STATUS_ACCEPTED);
//        try {
//            CommandUtil.run(workFile,Arrays.asList(languageConfig.getCompileCommand().split(" ")), null, stderrPath,null);
//            String err = FileUtil.readString(stderrPath, StandardCharsets.UTF_8);
//            compileResult.setFile(workDir);
//            if(StringUtils.isNotEmpty(err)){
//                compileResult.setStatus(Constants.Judge.STATUS_COMPILE_ERROR);
//                compileResult.setMsg(err);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            compileResult.setStatus(Constants.Judge.STATUS_SYSTEM_ERROR);
//            compileResult.setMsg(e.getMessage());
//        }
//
//
//        return compileResult;
//    }
//
//    @Override
//    protected RunResult run(RunDTO runDTO) {
//
//        String workDir = (String) runDTO.getFile();
//        String stderrPath = workDir + stderr;
//        String stdoutPath = workDir + stdout;
//
//        File workFile = new File(workDir);
//        RunResult runResult = new RunResult();
//        try {
//            CommandUtil.run(workFile,Arrays.asList(runDTO.getLanguageConfig().getRunCommand().split(" ")), stdoutPath, stderrPath,runDTO.getTestCaseInput());
//            String err = FileUtil.readString(stderrPath, StandardCharsets.UTF_8);
//            runResult.setFile(workDir);
//            if(StringUtils.isNotEmpty(err)){
//                runResult.setStatus(Constants.Judge.STATUS_COMPILE_ERROR);
//                runResult.setMsg(err);
//            }
//            else {
//                String res = FileUtil.readString(stdoutPath, StandardCharsets.UTF_8);
//                runResult.setStatus(Constants.Judge.STATUS_ACCEPTED);
//                runResult.setFile(res);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            runResult.setStatus(Constants.Judge.STATUS_SYSTEM_ERROR);
//            runResult.setMsg(e.getMessage());
//        }
//
//        return runResult;
//    }
//
//    @Override
//    public void afterHandle(CompileResult compileResult, List<RunResult> runResult) {
//
//    }
//}
